follow-up to
ae16476bcad27049f82e3043e88958405096c4bb
Now, the lengths are actual encoded size, resulting in:
DHCPv6
Message type: Reconfigure (10)
Transaction ID: 0x000000
Server Identifier
Option: Server Identifier (2)
Length: 10
DUID: 00030001xx
DUID Type: link-layer address (3)
Hardware type: Ethernet (1)
Link-layer address: xx
Link-layer address (Ethernet): xx
Client Identifier
Option: Client Identifier (1)
Length: 10
DUID: 00030001xx
DUID Type: link-layer address (3)
Hardware type: Ethernet (1)
Link-layer address: xx
Link-layer address (Ethernet): xx
Reconfigure Message
Option: Reconfigure Message (19)
Length: 1
Reconfigure message type: Renew (5)
The previous calculation would count a full DUID buffer
length, but the buffer size was not adjusted based on
the used size, resulting in DHCPv6 RECONF messages like:
DHCPv6
Message type: Reconfigure (10)
Transaction ID: 0x000000
Server Identifier
Option: Server Identifier (2)
Length: 10
DUID: 0003XXX
DUID Type: link-layer address (3)
Hardware type: Ethernet (1)
Link-layer address: XXX
Link-layer address (Ethernet): XXX
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
Client Identifier
Option: Client Identifier (1)
Length: 18
DUID: 0004xxx
DUID Type: Universally Unique IDentifier (UUID) (4)
UUID: xxx
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
DHCP option 0
Option: Unknown (0)
Length: 0
Reconfigure Message
Option: Reconfigure Message (19)
Length: 1
Reconfigure message type: Renew (5)
Signed-off-by: Paul Donald <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/361
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
memcpy(clientid.data, assign->duid, assign->duid_len);
+ size_t serverid_len, clientid_len;
+ serverid_len = sizeof(serverid.code) + sizeof(serverid.len) + ntohs(serverid.len);
+ clientid_len = sizeof(clientid.code) + sizeof(clientid.len) + ntohs(clientid.len);
+
struct iovec iov[IOV_TOTAL] = {
[IOV_HDR] = { &hdr, sizeof(hdr) },
- [IOV_SERVERID] = { &serverid, sizeof(serverid) },
- [IOV_CLIENTID] = { &clientid, sizeof(clientid) },
+ [IOV_SERVERID] = { &serverid, serverid_len },
+ [IOV_CLIENTID] = { &clientid, clientid_len },
[IOV_MESSAGE] = { &message, sizeof(message) },
[IOV_AUTH] = { &auth, sizeof(auth) },
};